#include <stdlib.h>
#include "HashESP.h"
#include "ListaEspecialidad.h"
#include "Especialidad.h"


HashESP* crear_HashESP(int numEntradas){
    HashESP *hash = malloc(sizeof(HashESP));
    hash->numEntradas = numEntradas;
    hash->entradas = malloc(numEntradas * sizeof(ListaEspecialidad));
    int i;
    for (i=0; i<numEntradas; i++){
        hash->entradas[i] = nueva_ListaEspecialidad();
    }
    return hash;
}

void inserta_HashESP(HashESP* hash, Especialidad* especialidad){
    int indice = sumaDigitos_HashESP(especialidad->codigo);    
    insertarFinal_ListaEspecialidad(&(hash->entradas[indice]),especialidad);
}

int sumaDigitos_HashESP(int cod){
    int sum = 0,digito;
    while (cod > 0){
        digito = cod % 10;
        sum = sum + digito;
        cod = cod / 10;
    }
    return sum;
}

Especialidad* buscar_HashESP(HashESP* hash, int cod){
    int indice = sumaDigitos_HashESP(cod); 
    ListaEspecialidad lista = hash->entradas[indice];
    NodoListaEspecialidad* i = NULL;
    for (i = lista.ini;i!=NULL  && i->especialidad->codigo != cod; i = i->sig);
    if(i==NULL) return NULL;
    return (i->especialidad);
}

void imprimir_HashESP(HashESP* hash){
    int i;
    for (i=0; i < hash->numEntradas; i++){
        imprimir_ListaEspecialidad(hash->entradas[i]);
    }
}







